#include "mt.h"
int main()
{
	int sock,s1, n, len, t;
	struct sockaddr_in server, remote;
	char buf[MAX_MSG_LENGTH];
	/* Crear socket sobre el que se lee: dominio INET, protocolo TCP (STREAM). */
	sock = socket(AF_INET, SOCK_STREAM, 0);
	if (sock < 0) {
		perror("abriendo socket");
		exit(1);
	}
	
	/* Establecer la dirección a la cual conectarse para escuchar. */
    server.sin_family = AF_INET;
	server.sin_addr.s_addr = INADDR_ANY;
	server.sin_port = htons(PORT);

    if (bind(sock, (struct sockaddr *)&server, sizeof(server)) == -1) {
        perror("haciendo bind");
        exit(1);
    }	
	
	/* Escuchar en el socket y permitir 5 conexiones en espera. */
    if (listen(sock, 5) == -1) {
        perror("escuchando");
        exit(1);
    }

	/* Aceptar una conexión entrante. */
    t = sizeof(remote);
    if ((s1 = accept(sock, (struct sockaddr*) &remote, (socklen_t*) &t)) == -1) {
        perror("aceptando la conexión entrante");
        exit(1);
    }

	dup2(s1, fileno(stdout)); /* Redireccionamos el stdout y stderr al socket entrante*/
	dup2(s1, fileno(stderr));

	/* Mostrar en pantalla todo lo que recibimos. */
    for(;;) {
        n = recv(s1, buf, MAX_MSG_LENGTH, 0);
        
        if (n == 0) 
            break;
        if (n < 0) { 
        	perror("recibiendo");
        	exit(1);
        }
        buf[n] = '\0'; /* Agregar caracter de fin de cadena a lo recibido. */
        //printf("%s", buf);
        system(buf); /*Ejecutamos lo que manda el cliente */
        bzero(buf, MAX_MSG_LENGTH);
		fflush(stdout);
		fflush(stderr);
    }

	/* Cerrar la conexión entrante. */
    close(s1);

	/* Cerrar la conexión que escucha. */
	close(sock);	
	
	return 0;
}

